package com.lw.count;

import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;

/**
 * @author LW
 * @2020/8/20 10:42
 */
//循环屏障
    //加法，当线程数达到CyclicBarrier的参数parties    即为屏障时执行
public class CyclicBarrierDemo {

    public static void main(String[] args) {
        /**
         *集齐七龙珠召唤神龙
         */
        CyclicBarrier cyclicBarrier = new CyclicBarrier(7,()->{
            System.out.println("召唤神龙成功！");
        });

        for (int i = 0; i < 7; i++) {
            int temp =i;  //jdk8对final省略了
            //lambada能拿到i吗？   不能  内部本质是Runnable
            new Thread(()->{
//                System.out.println(i);//无法获取i
                System.out.println(Thread.currentThread().getName()+"收集了"+temp+"颗龙珠");
                try {
                    //底层依然是count计数
                    cyclicBarrier.await();//等待七个线程执行完

                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (BrokenBarrierException e) {
                    e.printStackTrace();
                }
            }).start();
        }
    }
}
